atlantis.c revision 9682c8870b8ff5e4ac2e4c70b759f791c6f38c1f
15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/* Copyright (c) Mark J. Kilgard, 1994. */ 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/** 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * (c) Copyright 1993, 1994, Silicon Graphics, Inc. 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * ALL RIGHTS RESERVED 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Permission to use, copy, modify, and distribute this software for 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * any purpose and without fee is hereby granted, provided that the above 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * copyright notice appear in all copies and that both the copyright notice 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * and this permission notice appear in supporting documentation, and that 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * the name of Silicon Graphics, Inc. not be used in advertising 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * or publicity pertaining to distribution of the software without specific, 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * written prior permission. 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * US Government Users Restricted Rights 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Use, duplication, or disclosure by the Government is subject to 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * (c)(1)(ii) of the Rights in Technical Data and Computer Software 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * clause at DFARS 252.227-7013 and/or in similar or successor 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * clauses in the FAR or the DOD or NASA FAR Supplement. 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Unpublished-- rights reserved under the copyright laws of the 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * United States. Contractor/manufacturer is Silicon Graphics, 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * OpenGL(TM) is a trademark of Silicon Graphics, Inc. 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <stdio.h> 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <stdlib.h> 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <string.h> 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <math.h> 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <sys/time.h> 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <GLUT/glut.h> 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "atlantis.h" 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)fishRec sharks[NUM_SHARKS]; 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)fishRec momWhale; 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)fishRec babyWhale; 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)fishRec dolph; 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)GLboolean Timing = GL_TRUE; 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int w_win = 640; 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int h_win = 480; 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)GLint count = 0; 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)GLenum StrMode = GL_VENDOR; 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)GLboolean moving; 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static double mtime(void) 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) struct timeval tk_time; 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) struct timezone tz; 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gettimeofday(&tk_time, &tz); 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 4294.967296 * tk_time.tv_sec + 0.000001 * tk_time.tv_usec; 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static double filter(double in, double *save) 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static double k1 = 0.9; 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static double k2 = 0.05; 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) save[3] = in; 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) save[1] = save[0]*k1 + k2*(save[3] + save[2]); 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) save[0]=save[1]; 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) save[2]=save[3]; 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return(save[1]); 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void DrawStr(const char *str) 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GLint i = 0; 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if(!str) return; 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) while(str[i]) 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, str[i]); 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) i++; 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)InitFishs(void) 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int i; 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (i = 0; i < NUM_SHARKS; i++) { 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sharks[i].x = 70000.0 + rand() % 6000; 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sharks[i].y = rand() % 6000; 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sharks[i].z = rand() % 6000; 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sharks[i].psi = rand() % 360 - 180.0; 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sharks[i].v = 1.0; 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dolph.x = 30000.0; 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dolph.y = 0.0; 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dolph.z = 6000.0; 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dolph.psi = 90.0; 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dolph.theta = 0.0; 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dolph.v = 3.0; 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) momWhale.x = 70000.0; 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) momWhale.y = 0.0; 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) momWhale.z = 0.0; 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) momWhale.psi = 90.0; 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) momWhale.theta = 0.0; 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) momWhale.v = 3.0; 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) babyWhale.x = 60000.0; 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) babyWhale.y = -2000.0; 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) babyWhale.z = -2000.0; 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) babyWhale.psi = 90.0; 1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) babyWhale.theta = 0.0; 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) babyWhale.v = 3.0; 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Atlantis_Init(void) 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static float ambient[] = {0.2, 0.2, 0.2, 1.0}; 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static float diffuse[] = {1.0, 1.0, 1.0, 1.0}; 1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static float position[] = {0.0, 1.0, 0.0, 0.0}; 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static float mat_shininess[] = {90.0}; 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static float mat_specular[] = {0.8, 0.8, 0.8, 1.0}; 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static float mat_diffuse[] = {0.46, 0.66, 0.795, 1.0}; 1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static float mat_ambient[] = {0.3, 0.4, 0.5, 1.0}; 1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static float lmodel_ambient[] = {0.4, 0.4, 0.4, 1.0}; 1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static float lmodel_localviewer[] = {0.0}; 1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) //GLfloat map1[4] = {0.0, 0.0, 0.0, 0.0}; 1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) //GLfloat map2[4] = {0.0, 0.0, 0.0, 0.0}; 1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static float fog_color[] = {0.0, 0.5, 0.9, 1.0}; 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glFrontFace(GL_CCW); 1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glDepthFunc(GL_LESS); 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glEnable(GL_DEPTH_TEST); 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glLightfv(GL_LIGHT0, GL_POSITION, position); 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, lmodel_localviewer); 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glEnable(GL_LIGHTING); 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glEnable(GL_LIGHT0); 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess); 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular); 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse); 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient); 1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) InitFishs(); 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glEnable(GL_FOG); 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glFogi(GL_FOG_MODE, GL_EXP); 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glFogf(GL_FOG_DENSITY, 0.0000025); 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glFogfv(GL_FOG_COLOR, fog_color); 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glClearColor(0.0, 0.5, 0.9, 1.0); 1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void 1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Atlantis_Reshape(int width, int height) 1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) w_win = width; 1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) h_win = height; 1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glViewport(0, 0, width, height); 1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glMatrixMode(GL_PROJECTION); 1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glLoadIdentity(); 1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gluPerspective(60.0, (GLfloat) width / (GLfloat) height, 20000.0, 300000.0); 1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glMatrixMode(GL_MODELVIEW); 1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void 1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Atlantis_Animate(void) 1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int i; 1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (i = 0; i < NUM_SHARKS; i++) { 1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SharkPilot(&sharks[i]); 1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SharkMiss(i); 2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) WhalePilot(&dolph); 2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dolph.phi++; 2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) //glutPostRedisplay(); 2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) WhalePilot(&momWhale); 2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) momWhale.phi++; 2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) WhalePilot(&babyWhale); 2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) babyWhale.phi++; 2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void 2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Atlantis_Key(unsigned char key, int x, int y) 2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) switch (key) { 2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case 't': 2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Timing = !Timing; 2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case ' ': 2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) switch(StrMode) 2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { 2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case GL_EXTENSIONS: 2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) StrMode = GL_VENDOR; 2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case GL_VENDOR: 2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) StrMode = GL_RENDERER; 2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case GL_RENDERER: 2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) StrMode = GL_VERSION; 2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case GL_VERSION: 2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) StrMode = GL_EXTENSIONS; 2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case 27: /* Esc will quit */ 2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) exit(1); 2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case 's': /* "s" start animation */ 2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) moving = GL_TRUE; 2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) //glutIdleFunc(Animate); 2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case 'a': /* "a" stop animation */ 2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) moving = GL_FALSE; 2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) //glutIdleFunc(NULL); 2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case '.': /* "." will advance frame */ 2465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!moving) { 2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Atlantis_Animate(); 2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/* 2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void Display(void) 2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 2545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static float P123[3] = {-448.94, -203.14, 9499.60}; 2555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static float P124[3] = {-442.64, -185.20, 9528.07}; 2565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static float P125[3] = {-441.07, -148.05, 9528.07}; 2575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static float P126[3] = {-443.43, -128.84, 9499.60}; 2585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static float P127[3] = {-456.87, -146.78, 9466.67}; 2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static float P128[3] = {-453.68, -183.93, 9466.67}; 2605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glPushMatrix(); 2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FishTransform(&dolph); 2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DrawDolphin(&dolph); 2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glPopMatrix(); 2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutSwapBuffers(); 2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)*/ 2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void 2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Atlantis_Display(void) 2745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int i; 2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static double th[4] = {0.0, 0.0, 0.0, 0.0}; 2775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static double t1 = 0.0, t2 = 0.0, t; 2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) char num_str[128]; 2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) t1 = t2; 2815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (i = 0; i < NUM_SHARKS; i++) { 2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glPushMatrix(); 2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FishTransform(&sharks[i]); 2875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DrawShark(&sharks[i]); 2885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glPopMatrix(); 2895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glPushMatrix(); 2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FishTransform(&dolph); 2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DrawDolphin(&dolph); 2945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glPopMatrix(); 2955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glPushMatrix(); 2975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FishTransform(&momWhale); 2985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DrawWhale(&momWhale); 2995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glPopMatrix(); 3005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glPushMatrix(); 3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FishTransform(&babyWhale); 3035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glScalef(0.45, 0.45, 0.3); 3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DrawWhale(&babyWhale); 3055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glPopMatrix(); 3065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if(Timing) 3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { 3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) t2 = mtime(); 3105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) t = t2 - t1; 3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if(t > 0.0001) t = 1.0 / t; 3125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glDisable(GL_LIGHTING); 3145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) //glDisable(GL_DEPTH_TEST); 3155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glColor3f(1.0, 0.0, 0.0); 3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glMatrixMode (GL_PROJECTION); 3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glPushMatrix(); 3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glLoadIdentity(); 3215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glOrtho(0, w_win, 0, h_win, -10.0, 10.0); 3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glRasterPos2f(5.0, 5.0); 3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) switch(StrMode) 3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { 3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case GL_VENDOR: 3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sprintf(num_str, "%0.2f Hz, %dx%d, VENDOR: ", filter(t, th), w_win, h_win); 3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DrawStr(num_str); 3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DrawStr(glGetString(GL_VENDOR)); 3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 3325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case GL_RENDERER: 3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sprintf(num_str, "%0.2f Hz, %dx%d, RENDERER: ", filter(t, th), w_win, h_win); 3345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DrawStr(num_str); 3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DrawStr(glGetString(GL_RENDERER)); 3365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 3375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case GL_VERSION: 3385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sprintf(num_str, "%0.2f Hz, %dx%d, VERSION: ", filter(t, th), w_win, h_win); 3395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DrawStr(num_str); 3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DrawStr(glGetString(GL_VERSION)); 3415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case GL_EXTENSIONS: 3435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sprintf(num_str, "%0.2f Hz, %dx%d, EXTENSIONS: ", filter(t, th), w_win, h_win); 3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DrawStr(num_str); 3455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DrawStr(glGetString(GL_EXTENSIONS)); 3465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glPopMatrix(); 3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glMatrixMode(GL_MODELVIEW); 3515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glEnable(GL_LIGHTING); 3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) //glEnable(GL_DEPTH_TEST); 3545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) count++; 3575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutSwapBuffers(); 3595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/* 3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void 3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Visible(int state) 3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (state == GLUT_VISIBLE) { 3661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (moving) 3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutIdleFunc(Animate); 3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (moving) 3705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutIdleFunc(NULL); 3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void 3765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)timingSelect(int value) 3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) switch(value) 3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { 3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case 1: 3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) StrMode = GL_VENDOR; 3825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 3835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case 2: 3845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) StrMode = GL_RENDERER; 3855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 3865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case 3: 3875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) StrMode = GL_VERSION; 3885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 3895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case 4: 3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci StrMode = GL_EXTENSIONS; 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci break; 3925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void 3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TuccimenuSelect(int value) 3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci switch (value) { 3995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case 1: 4005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) moving = GL_TRUE; 4015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutIdleFunc(Animate); 4025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 4035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case 2: 4045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) moving = GL_FALSE; 4055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutIdleFunc(NULL); 4065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 4075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case 4: 4085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) exit(0); 4095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 4105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int 4145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)main(int argc, char **argv) 4155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){ 4165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GLboolean fullscreen = GL_FALSE; 4175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GLint time_menu; 4185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) srand(0); 4205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutInit(&argc, argv); 4225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (argc > 1 && !strcmp(argv[1], "-w")) 4235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) fullscreen = GL_FALSE; 4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) //glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); 4265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutInitDisplayString("rgba double depth=24"); 4275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (fullscreen) { 4285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutGameModeString("1024x768:32"); 4295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutEnterGameMode(); 4305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 4315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutInitWindowSize(320, 240); 4325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutCreateWindow("Atlantis Timing"); 4335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Init(); 4355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutDisplayFunc(Display); 4365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutReshapeFunc(Reshape); 4375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutKeyboardFunc(Key); 4385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) moving = GL_TRUE; 4395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)glutIdleFunc(Animate); 4405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutVisibilityFunc(Visible); 4415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) time_menu = glutCreateMenu(timingSelect); 4435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutAddMenuEntry("GL_VENDOR", 1); 4445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutAddMenuEntry("GL_RENDERER", 2); 4455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutAddMenuEntry("GL_VERSION", 3); 4465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutAddMenuEntry("GL_EXTENSIONS", 4); 4475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutCreateMenu(menuSelect); 4495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutAddMenuEntry("Start motion", 1); 4505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutAddMenuEntry("Stop motion", 2); 4515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutAddSubMenu("Timing Mode", time_menu); 4525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutAddMenuEntry("Quit", 4); 4535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) //glutAttachMenu(GLUT_RIGHT_BUTTON); 4555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutAttachMenu(GLUT_RIGHT_BUTTON); 4565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) glutMainLoop(); 4575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; // ANSI C requires main to return int. 4585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)*/